[c]关于循环结构的问题2

来源:百度知道 编辑:UC知道 时间:2024/05/04 05:47:59
#include<stdio.h>
main()
{ int i,b,k=0;
for(i=1;a<=5;i++)
{ b=i%2;
while(b-->=0)k++;
}
printf("%d,%d",k,b);
}

问输出结果 答案给的是8,-2不是很明白

我想那个a应该是k吧
首先k<=5的条件成立所以for循环继续b=i%2所以b=1
然后while里面b递减到-2时循环打破,k这是等于2
k还是<=5所以再循环下去,b=2%2所以b=0,这时k又变成3
一直继续,由此可看出个规律当i是奇数的时候k可以增加2
当i是偶数的时候,k只增加1
所以当k等于6时循环打破而之前b因为递减到-2而打破while这个循环的,当然最后输出的结果应该是6,-2
怎么会是8,-2的,你可以用编辑器编译一下,看看结果就知道是6,-2了

"for(i=1;a<=5;i++)"中的a是那出来的,你的程序估计有错

因为b-->=0中“--”为后缀减1运算符,无论b-->=0是否成立,它总是要在b-->=0之后执行一次,所以当b=-1时,b-->=0不成立,但是减1运算符还是要运行一次,所以最好b=-2。

如果不能理解,我改了一下你的程序,你运行一下就懂了。

#include<stdio.h>
main()
{
int i,b,k=0;

for(i=1;i<=5;i++)
{
b=i%2;
printf("out=%d\n",b);
while(b-->=0)
{
k++;
printf("in=%d\n",b);
}
printf("last=%d\n\n",b);
}

printf("%d,%d\n",k,b);
getch();
}